﻿using System;

namespace AlgorithmPractice;

/// <summary>
/// 直接选择排序
/// </summary>
public class StraightSelectSorting
{
    public static void Sort(int[] toBeSorted)
    {
        StartSort(toBeSorted);
        Console.WriteLine(string.Join("、", toBeSorted));
    }

    /// <summary>
    /// 第一次从R[0]~R[n-1]中选取最小值，与R[0]交换，
    /// 第二次从R[1]~R[n-1]中选取最小值，与R[1]交换，....，
    /// 第i次从R[i-1]~R[n-1]中选取最小值，与R[i-1]交换，.....，
    /// 第n-1次从R[n-2]~R[n-1]中选取最小值，与R[n-2]交换，
    /// 总共通过n-1次，得到一个按排序码从小到大排列的有序序列。
    /// </summary>
    /// <param name="toBeSorted"></param>
    private static void StartSort(int[] toBeSorted)
    {
        for (var i = 0; i < toBeSorted.Length; i++)
        {
            var minimumPos = i;
            for (var j = i + 1; j < toBeSorted.Length; j++)
            {
                if (toBeSorted[j] < toBeSorted[minimumPos])
                    minimumPos = j;
            }

            if (i != minimumPos)
                toBeSorted[i] = toBeSorted[minimumPos] - toBeSorted[i] + (toBeSorted[minimumPos] = toBeSorted[i]);
        }
    }
}